フランス発のデータカタログ「Castor」を試してみた
さがらです。
フランス発のデータカタログ「Castor」を試してみました。その内容を本記事でまとめます。
Castorとは
Castorは、記事名にもある通りフランスのパリに本社を置く企業で、データカタログのプロダクトを開発・提供しています。
2020年に創業した企業ですが、今年2022年6月にも$23.5Mの資金調達を行うなど、さらなる成長が見込まれる企業です。
また、Castor社の面白いところはModern Data Stackに関する情報をまとめたNotionを公開していることです。
各社がどういったサービスでデータ基盤を構築しているのか、各分野別のサービス一覧とCastor社から見た評価、といった内容がまとまっています。
下記のリンクからNotionを見ることが出来ますので、ぜひこちらも併せてご覧ください。
ログイン
まず、Castorですがすぐに使用できるフリートライアルはありません。Castor社に連絡を取り、環境を整備して頂く必要があります。
環境整備完了の連絡を受けたら、サインアップ用のページから各情報を入力してサインアップします。(私はGoogle認証を用いました。)
初めてのログインだと、このように初回ログイン時のガイドが出てきます。
接続設定
今回はCastorに対してBigQuery・dbt・Lookerを繋いで、それぞれのメタデータを収集してみたいと思います。また、Slackも連携設定をしておくことで、Slackでの議論を行ったスレッドのURLをCastorに連携する機能も試せるようにしておきます。
BigQuery
CastorからBigQueryのメタデータを取得するための手順は、下記のドキュメントにまとまっております。こちらの手順に沿って行っていきます。
まず、Google Cloud上でCastorと連携させるBigQueryへのアクセス権を持つサービスアカウントを作る必要があります。サービスアカウントの作成はGoogle Cloudの公式Docも参考にしてください。
作成したサービスアカウントには、以下のロールを付与してください。
- BigQuery Read Session User
- BigQuery Metadata Viewer
- BigQuery Job User
- BigQuery Resource Viewer
サービスアカウントを作成してロールの付与も完了したら、Castor上での設定に移ります。
Castorの画面左のSettings
を押した後、Integrations
タブを押します。
Data Warehouses欄から、BigQuery
を選択します。
Castor Managed
を選択します。
Source Name
に作成するソース名を入れます。任意の名称でOKです。
作成したサービスアカウントから生成できるCredential用のJSONの内容をコピーして、Credentials as JSON
欄に貼り付けます。最後にSave
を押して、完了です。
無事に作成が終わると、このような画面が出てきます。2022年8月5日の9時35分に登録し、2022年8月5日23時4分にメタデータ収集完了していました。
dbt
Castorからdbtのメタデータを取得するための手順は、下記のドキュメントにまとまっております。
こちらのドキュメントを見ると、「One Shot Load」「Scheduled Sync」の2種類があります。今回はひとまず検証ということで「One Shot Load」の方法で進めます。
「One Shot Load」の場合は、ジョブの実行により生成されるmanifest.json
をCastor社の担当者にSlackかメールで送ればOKです。
dbt Cloudの場合は、「本番用のEnvironmentで動かしたジョブにより生成されたmanifest.json
」を指定するように注意してください。開発環境のmanifest.json
だと、記述されているスキーマやテーブルが開発環境の仕様となっているためです。
dbt Cloudでの手順としては、本番環境で動かしたジョブのHisotryを開き、Artifacts
の中からmanifest.json
を取得すればOKです。
このdbtのメタデータ収集に関しては、他のDWHなどと同じくCastorの画面UIから設定できるようになると嬉しいですね!ここは今後のアップデートに期待です。
Looker
CastorからLookerのメタデータを取得するための設定をしていきます。
まず、LookerのAdmin権限を持つユーザーで、LookerのAPI Keyを生成します。この手順はこちらのDocをご覧ください。
下図のLookerの画面上でのCliend ID
とClient Secret
が後工程で必要となります。
Looker側での準備は以上のため、Castorでの設定に移ります。
Castorの画面左のSettings
を押した後、Integrations
タブを押します。
Data Visualizations欄からLooker
を選択します。
Castor Managed
を選択します。
Source Name
に作成するソース名を入れます。任意の名称でOKです。
3項目それぞれを入力して、Save
を押します。
Host
:使用しているインスタンスのURLの、https://
からドメインまでをコピーして入れます。※Looker上でAPI Host URLを別途指定している場合はそちらを入力してください。API Client Id
:先程Looker上で確認したClient ID
を入れます。API Client Secret
:先程Looker上で確認したClient Secret
を入れます。
認証が上手くいけば、下図のような画面が出てきます。
また、LookerのExploreとダッシュボードをCastorに連携させるだけならここまでの内容を行えばよいのですが、DWH上のテーブルとLookerのExplore・ダッシュボードを繋げたリネージをCastor上で表示させるには、対象となるLookMLを管理するリポジトリの情報も必要です。
今回はリモートリポジトリをZipで圧縮したものをCastor社の担当の方に送付して対応頂きました。本番稼働時は、Castor社に対してリモートリポジトリのSSHのURLを送付し、Castorの画面からDeploy Keyの設定もすれば、自動で更新をしてくれるようです。
Slack
Castorの画面左のSettings
を押した後、Integrations
タブを押します。
Others欄からSlack
を選択します。
右上のリストから連携したいワークスペースを選択した上で、「許可する」を押します。
対象のSlackアプリ上で、Castorが追加されたことを確認できたらOKです!
その他のツールとの連携
2022年8月26日時点、CastorのGUIからは下図のサービスの連携設定が出来ます。
これらのサービス以外にも、例えばBIツールだとTableau等と連携が出来るのですが、GUIから連携ができないサービスは別途Pythonを用いたコネクタが必要なようです。
各サービスごとにドキュメントもあるので、もしGUIから連携できないサービスをCastorに連携させたい場合には、参考にしてみてください。
Data
ここからは、BigQuery・dbt・Looker・SlackをCastorに連携したら出来ることを確認してみます。
画面左の「Data」を押すと、Castorに接続したBigQueryのプロジェクト、データセット一覧が出てきます。
データセットを選択すると、右側にそのデータセットに含まれるテーブル一覧が出てきます。
Columnsタブ
各テーブルを押すと、Columnsタブが選択された状態で下図のような画面になります。
dbtを連携しているので、Descriptionにdbtのdescription
が記載されていますね。
また、各カラムのAction列を見ると、そのカラムに対して4つのアクションを取ることが出来ます。Primary KeyやPII(個人情報)の設定をクリックするだけで簡単に行えるのは楽でいいですね。
- 対象のカラムを、カタログ上でPrimary Keyとして設定する
- 対象のカラムを、PIIとして設定する
- 対象のカラムの説明画面へのリンクをクリップボードにコピーする
- 対象のカラムに紐づく、列レベルリネージを表示する(列レベルリネージの画像は2枚目)
次に、画面右側では、このテーブルのオーナーを設定、このテーブルに対して発行されたクエリ数からこのテーブルの相対的な人気度合いを見る、タグ付け、Descriptionの確認、などを確認することが出来ます。
Read meタブ
対象のテーブルのDescriptionを見るだけでなく、このテーブルに関連するアセットを確認することも出来ます。
関連するアセットを追加する際には、Pinned assets
の横の「+」マークを押して、Tables
、Knowledge
、Dashboards
、Fields
を関連づけることが出来ます。
Lineageタブ
Lineageタブでは、DWH上のテーブル~BIツールのダッシュボードまでのリネージを確認することが出来ます。
Lineageタブを押した段階では、対象のテーブルの親にあたるオブジェクトがSourcesに表示され、対象のテーブルの子にあたるオブジェクトがChildrenとして表示されます。
実際のリネージを図として見たい場合には、下図の赤枠内を押せば見ることが出来ます。リネージ上の右上のDashboard
を押すと、実際のLookerのダッシュボードへリンクも出来ます。
また、リネージ上でも「+」を押すことで、更に親や子にあたるオブジェクトを展開することが出来ます。
Queriesタブ
Queriesタブでは、対象のテーブルに対して実行されたクエリを表示することが出来ます。注意点として、2022年8月時点では30単語以上のクエリでないと抽出されないようです。(適当に投げられたクエリ、select * from table
などは対象外としている)
Commentsタブ
Commentsタブでは、対象のテーブルに対してCastor上でコメントが出来ます。
Historyタブ
対象のテーブルに関するDescriptionの変更履歴をたどる事ができます。
試しにカラムのDescriptionを追加してみると、Historyタブですぐに確認が出来ました。
Dashboards
画面左の「Dashboards」を押すと、Castorに連携したBIツール上にあるダッシュボードが表示されます。Lookerの場合には、ダッシュボードだけでなく、Look、Exploreも表示されます。
各ダッシュボードを押すと、詳細画面に移動します。テーブルと同じ様に、Read me、Lineage、Comments、History、という4種類のタブがあります。(機能はテーブルと同等のため、説明は割愛します。)
Knowledge
Knowledgeは、Castorに登録されたテーブルやダッシュボードなどの各種アセットに関する使い方や注意事項を蓄積することが出来る機能です。
新しいKnowledgeを追加するには、画面左のKnowledgeの横の「+」を押すと、新しいページを立ち上げる事ができます。
簡易的なWikiのような形で編集することが出来ます。(Markdownは使えませんでした。)
Pinned assets
として、各テーブルやダッシュボードなどと紐づけることも可能です。
ちなみに、KnowledgeからPinned assets
をしたオブジェクトでは、Mentioned in
という欄にKnowledgeへのリンクが追加されていました。
検索機能
これまでCastorで確認できることを中心に説明してきましたが、Data、Dashboards、Knowledge、すべて検索ボックスから検索も可能です。
Castorの画面の一番上に検索ボックスがあるので、ここから検索が可能です。
日本語での検索も可能です。「テーブル」と検索してみると、Dashboards、Tables、Definitions(Knowledgeとか)が検索結果として出てきます。
またShow more
を押すと、より詳細な検索画面を表示することが出来ます。検索対象のオブジェクトを絞り込んだり、PIIが付いているもの、特定のタグ、などで検索することも可能です。
SlackからCastorに議論した内容を連携
Castorは、事前にSlackにCastorのアプリを入れて連携をしておくと、各テーブルやフィールドの詳細画面のリンクをSlack上で貼り付けて投稿した際に、そのスレッドへのリンクをCastorに連携出来る機能があります。
まず、適当にCastorでテーブルの詳細画面を開き、ページリンクをコピーします。
このリンクをSlackで貼り付け。適当なテキストと併せて投稿してみます。
すると、Castorのアプリを入れている場合、対象のテーブルのDescriptionと併せSave thread link in castor
というボタンが出てきます。このボタンを押すと、Castor上で対象のテーブルのCommentsタブで、スレッドの一番最初の投稿のテキストと共に、Slackのスレッドへのリンクが表示されます。
このような形で、Slack上でのデータに関する議論もすぐに連携可能です。Slack上で何か確認したい際は、関連するURLを貼ることはよくあるケースだと思いますので、ちょっとしたナレッジも逃すことなくCastorで一元管理できる、素晴らしい機能だと感じました!
People
Peopleでは、Castor上で管理するユーザー一覧を表示できます。
Castorでは接続しているサービス上のユーザーも収集するようで、下図ではLooker上のユーザーに対して「Invite to Castor」でCastorに招待することが出来ます。(もちろんこの導線以外でもCastorから直接ユーザーの招待は可能です。)
また、各ユーザーを押すと、各ユーザーがCastorに連携しているサービスにおいて、どんなクエリを発行しているか、どのテーブルを見ているか、どのダッシュボードを見ているか、Castor上で関わったKnowledgeはどれか、Castor上でどんな書き込みをしているか、ということが各タブからわかるようになっています。
Governance
Governanceでは、Castorと連携しているテーブル・フィールドに関して、同じ名前のフィールドがあれば、まとめてdescriptionを定義できる機能です。
例えば、下図のようにcustomer_id
というカラムに対して、dbt経由で「Primary key」とDescriptionを設定していたとします。
このとき、Governanceからcustomer_id
を押すと、「2 columns with this description」ということで、「Primary key」が2つのcustomer_id
というカラムで既にdescriptionとして定義されているよ、と教えてくれます。
この状態で、Propagate
を押してみます。
下図のように、Castorに連携されているcustomer_id
を持つテーブルの一覧が出てきます。Select all
を押して全て対象にした上で、右下のSave
を押してみます。
すると、元々Descriptionが空白だったcustomer_id
に、「Primary key」というDescriptionが入りました。カラム名が同じだとほぼ説明も同じだと思いますので、この機能があれば簡単にDescriptionを埋めることが出来ますね!
ちなみに、各テーブルの詳細画面からも、Description欄が「See suggestions from other tables」となっている場合にその箇所をクリックすると、他のテーブルで定義済のDescriptionが候補値として表示されます。
最後に
フランス発のデータカタログ「Castor」を試してみました。
UIがわかりやすいためマニュアルを見ずとも直感的に操作ができるだけでなく、Slackで行った議論をすぐに確認できるようにSlackのスレッドURLをCastorに連携できたり、一度定義されたdescriptionを再利用できたりと、データカタログ導入後の課題である「運用負荷」を削減できる機能が多く備わっていることがとても良いなーと感じました!
まだ創業後2年しか経っていないと考えると、これからもユーザーフレンドリーな機能が多く実装されていくのだと思います。今後がとても楽しみなデータカタログです!